package com.atguigu.gulimall.seckill;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 秒杀服务启动类
 * 整合sentinel步骤：
 *  1、在common工程引入依赖,因为所有服务都需要使用熔断降级
 *      <dependency>
 *             <groupId>com.alibaba.cloud</groupId>
 *             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
 *         </dependency>
 *   2、下载sentinel-dashboard-1.6.3.jar包，并且运行
 *   3、配置sentinel
 *      spring.cloud.sentinel.transport.dashboard=127.0.0.1:8333
 *      spring.cloud.sentinel.transport.port=8719
 *   4、在控制台调整参数。【默认所有的流控设置保存在内存中，重启失效】
 *
 *   5、每一个模块都导入actuator（统计审计信息），并配置management.endpoints.web.exposure.include=*
 *
 *  6、自定义sentinel流控返回数据 SeckillSentinelConfig配置类
 *
 *  7、使用sentinel来保护fegin远程调用，熔断机制；
 *      1、调用方的熔断保护: feign.sentinel.enabled=true
 *      2、调用方手动指定远程服务的降级策略，远程服务呗降级处理。触发我们的熔断回调方法
 *      3、超大浏览的时候，必须牺牲一些远程服务，在服务的提供方（远程服务）指定降级策略。
 *          提供方是在运行，但是不运行自己的业务逻辑，返回的是默认的降级数据（降级的数据）
 *
 *
 *
 */
@EnableRabbit // 开启rabbitMQ功能
@EnableDiscoveryClient //nacos注册中心客户端
@EnableRedisHttpSession // 整合redis作为session存储，
@EnableFeignClients // 开启远程调用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) // 排除jdbc连接
public class GulimallSeckillApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallSeckillApplication.class, args);
    }

}
